package com.example.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.constant.BasePage;
import com.example.common.Re;
import com.example.dto.OrdersDto;
import com.example.entity.Orders;
import com.example.service.IOrdersService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.time.LocalDateTime;

/**
 * <p>
 * 订单表
 * </p>
 *
 * @author czx
 * @since 2022-04-28
 */
@RestController
@Slf4j
@RequestMapping("/order")
public class OrdersController {

    @Resource
    private IOrdersService ordersService;


    /**
     * 用户下单
     *
     * @param order 订单
     * @return 下单结果
     */
    @PostMapping("/submit")
    public Re<String> submit(@RequestBody Orders order) {
        log.info("用户的订单数据： {}", order);
        boolean pay = ordersService.submit(order);
        if(pay){
            return Re.success("支付成功");
        }
        return Re.error("支付失败");
    }

    /**
     * 订单信息查询
     *
     * @param basePage 分页信息
     */
    @GetMapping("/userPage")
    public Re<Page<OrdersDto>> userPage(BasePage basePage){
        Page<OrdersDto> page = ordersService.pageWithOrderDetailAndUser(basePage);
        log.info("订单信息查询...");
        if(page.getSize()>0){
            return Re.success(page);
        }
        return Re.error("暂无订单");
    }

    /**
     * 员工的订单信息查询
     *
     * @param page 分页大小
     * @param order 订单条件
     * @param begin 开始
     * @param end 结束
     * @return dto数据传输对象
     */
    @GetMapping("/page")
    public Re<Page<OrdersDto>> page(BasePage page, Orders order, LocalDateTime begin,LocalDateTime end){
        log.info("后台订单信息查询中...");
        log.info("查询条件:{}",order);
        Page<OrdersDto> dtoPage = ordersService.pageWithOrderDetail(page,order,begin,end);
        if(dtoPage.getSize()>=0){
            return Re.success(dtoPage);
        }
        return Re.error("获取订单出错");
    }

    /**
     * 更新订单状态
     *
     * @param order 订单
     * @return 结果
     */
    @PutMapping
    public Re<String> updateByStatus(@RequestBody Orders order){
        boolean updateByStatus = ordersService.updateByStatus(order);
        if(updateByStatus){
            return Re.success("订单状态更新成功");
        }
        return Re.error("订单状态更新失败");
    }


    @PostMapping("/again")
    public Re<String> orderAgain(@RequestBody Orders order){
        log.info("再来一单：{}",order.getId());
        boolean again = ordersService.again(order);
        if(again){
            return Re.success("再来一单成功");
        }
        return Re.error("再来一单失败");
    }
}
